# 系统文件库/目录
import os
import re
# 系统库  遍历删除
import shutil, uuid


# 创建文件操作类
class Myfile:

    def __init__(self, file_dir="./static/upload"):

        self.file_dir = file_dir

    # 创建文件夹
    def mkdir(self, id):

        # 判断是否存在这个文件夹
        if not os.path.exists(self.file_dir + '/' + str(id)):
            os.mkdir(self.file_dir + '/' + str(id))

    # 删除文件
    def remove(self, id, filename):
        os.remove(self.file_dir + '/' + str(id) + '/' + filename)

    # 注销整体目录
    def remove_all(self, id):
        # 递归删除  先删除文件内---文件
        shutil.rmtree(self.file_dir + '/' + str(id))

    # 列出所有文件
    def list_dir(self, id):
        #  返回需要查看的目录
        return os.listdir(self.file_dir + '/' + str(id))

    # 列出所有文件夹
    def fileall(self):
        #  返回需要查看的目录
        return os.listdir(self.file_dir)

    # 列出所有文件夹
    def filelist(self, id):
        lis = []
        dic = {}
        #  返回需要查看的目录
        for i in id:
            dic[i] = i
            dic[i] = os.listdir(self.file_dir + '/' + str(i))
        lis.append(dic)

        return lis

    # 文件名排序
    def sort_file(self, id, reverse=False):
        # 排序
        # sort(内置,在原来的基础上排序)              sorted(全局,保留原对象)
        files = os.listdir(self.file_dir + '/' + str(id) + '/')
        # files.sort(reverse=reverse)
        # return files
        list1 = sorted(files)
        print('字符排序')
        print(list1)
        return list1

    # 文件后缀排序
    def sort_files_suffix(self, id, reverse=False):
        filenames = os.listdir(self.file_dir + '/' + str(id) + '/')
        filenames.sort(key=lambda x: (x.split('.')[1]))
        # 分割方法:    分割以后排下标1的  [['文件名','jpg'],['文件名','png']]
        print(filenames)
        # for循环方法:     循环之后os模块操作
        # 空List
        # li = []
        # for i in filenames:
        #     print(i)
        #     # 获取文件后缀
        #     back = os.path.splitext(i)[-1]
        #     li.append([i,back])
        # li.sort(reverse=reverse)
        # return li

        return filenames
        # filenames.sort(key=lambda x:(x[-6:]))

    # 列出所有文件
    def list_dir_all(self, id, reverse=False, back=False, back_reverse=False):
        # 排序
        # sort(内置,在原来的基础上排序)              sorted(全局,保留原对象)
        mylist = os.listdir(self.file_dir + '/' + str(id) + '/')
        # 空list
        li = []
        for i in mylist:
            # 获取文件后缀
            back = os.path.splitext(i)[-1]
            li.append([i, back])
        li.sort(reverse=reverse)
        # 判断逻辑  如果有根据后缀排序
        if back:
            li.sort(key=lambda x: x[1], reverse=back_reverse)
        return li

    # 列出所有文件
    def list_dir_sorted(self, id, reverse=False, back=False, back_reverse=False):
        # 排序
        # sort(内置,在原来的基础上排序)              sorted(全局,保留原对象)
        mylist = os.listdir(self.file_dir + '/' + str(id) + '/')
        # 空list
        li = []
        for i in mylist:
            # 获取文件后缀
            back = os.path.splitext(i)[-1]
            li.append([i, back])
        # 判断逻辑  如果有根据后缀排序
        if back:
            li = sorted(li, key=lambda x: x[1], reverse=back_reverse)
        else:
            li = sorted(li, reverse=reverse)
        return li

    # 文件重命名(修改)
    def updatefile(self, id, old_filename, new_filename):
        os.rename(self.file_dir + '/' + str(id) + '/' + old_filename,
                  self.file_dir + '/' + str(id) + '/' + new_filename
                  )

    # rename视频重命名
    def rename(self, filename):
        # 获取文件路径的文件名
        ext = os.path.splitext(filename)[-1]
        # 生成新文件名
        newfile = uuid.uuid4().hex + ext

        return newfile

# myfile = Myfile()
# 创建
# print(myfile.mkdir(28))
# 查看
# print(myfile.list_dir(25))
# 删除文件夹的某个文件
# print(myfile.remove(25,'2.jpg'))
# 账户注销删除文件夹
# print(myfile.remove_all(25))
# 文件名排序
# print(myfile.list_dir_sorted(57))
# print(myfile.rename('text.mp4'))